#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/2/6
# @Author: Sunny
# ========================

"""
with打开文件的时候，为什么会自动关闭？
with打开文件时，其实是启动了文件的上下文管理协议

上下文管理器协议(其实也就是2个魔术方法)：
__enter__: 进入对象的上下文管理器

__exit__: 退出对象的上下文管理器

with:python中的关键字，它可以开启一个对象的上下文管理器协议
"""


class MyOPen:

    def __enter__(self):
        print('----------enter--------')
        return 'python'    #这里返回的就是上下文管理器as后面接收的对象

    def __exit__(self, exc_type, exc_val, exc_tb): #这三个参数是用来接收异常的，异常类型，异常内容，异常溯源信息，
                                        # 如果不写这几个参数，出现异常信息，异常信息会当初参数传进来，但是函数没有位置参数接收，会报错
        print('---------exit-----------')


obj = MyOPen()

# with 启动上下文协议
# obj 是被启动的对象
# f接收到的进入__enter__后返回的内容python
with obj as f:
    print('--with中的代码')
    print('f:', f)
    # print(name) #当里面代码报错时，会把报错信息当成参数传给__exit__里面的参数去，最后再打印出来

# with open('text.txt','w') as f2:
#     pass
